package com.ttg.web.dao.Impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.ttg.common.entities.BasePage;
import com.ttg.common.enums.OperationTypeEnum;
import com.ttg.model.dto.TagClassDTO;
import com.ttg.model.dto.TagClassPageDTO;
import com.ttg.model.pojo.TagClass;
import com.ttg.model.mapper.TagClassMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ttg.model.vo.TagClassVO;
import com.ttg.web.dao.TagClassDao;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;

/**
 * 标签分类表(TblTagClass) daoImpl
 *
 * @author chenyou
 * @datetime 2025-10-20 17:43:45
 */
@Service
public class TagClassDaoImpl extends ServiceImpl<TagClassMapper, TagClass> implements TagClassDao {

    @Override
    public BasePage<TagClassVO> pagelist(TagClassPageDTO reqDto) {
        return baseMapper.pagelist(reqDto.parse(),reqDto.getClassLevel(),reqDto.getClassName(),reqDto.getClassStatus(),reqDto.getClassParentId());
    }

    @Override
    public Integer getSortNoByLevel(Integer parentId,Integer level) {
        LambdaQueryWrapper<TagClass> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(parentId!=null,TagClass::getClassParentId,parentId)
                .eq(TagClass::getClassLevel,level)
        .orderByDesc(TagClass::getClassSortNo);
        List<TagClass> result = list(wrapper);
        if(CollectionUtils.isEmpty(result)){
            return null;
        }
        return result.get(0).getClassSortNo();
    }

    @Override
    public TagClass getParentClass(Integer parentId) {
        LambdaQueryWrapper<TagClass> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(TagClass::getClassId,parentId);
        return getOne(wrapper);
    }

    @Override
    public TagClass getClassName(TagClassDTO reqDto, OperationTypeEnum typeEnum) {
        LambdaQueryWrapper<TagClass> wrapper = new LambdaQueryWrapper<>();
        if(OperationTypeEnum.UPDATE.equals(typeEnum)){
            wrapper.notIn(TagClass::getClassId,reqDto.getClassId());
        }
        wrapper.eq(TagClass::getClassName,reqDto.getClassName());
        return getOne(wrapper);
    }

    @Override
    public List<TagClass> getClass(TagClassDTO reqDto) {
        LambdaQueryWrapper<TagClass> wrapper = new LambdaQueryWrapper<>();
        if(reqDto.getClassParentId()!=null  && reqDto.getClassParentId()!=0){
            wrapper.eq(TagClass::getClassParentId,reqDto.getClassParentId());
        }
        if(reqDto.getClassId()!=null  && reqDto.getClassId()!=0){
            wrapper.eq(TagClass::getClassId,reqDto.getClassId());
        }
        if(reqDto.getClassType()!=null  && reqDto.getClassType()!=0){
            wrapper.eq(TagClass::getClassType,reqDto.getClassType());
        }
        return list(wrapper);
    }
    @Override
    public TagClassVO getParentClassInfo(Integer classId) {
        return baseMapper.getParentClassInfo(classId);
    }
}

